--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
electron/shellPathGuard.js fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 3.17 KB
Ta5d6ff"use strict"Tb4b4b4;
Tff7b72const Te6edf3fs Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"fs"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3path Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"node:path"Tb4b4b4)Tb4b4b4;
Tff7b72function Te6edf3parseArgvFlagTb4b4b4(Te6edf3argvTb4b4b4, Te6edf3flagNameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3list Tff7b72= Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3argvTb4b4b4) Tff7b72? Te6edf3argv Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3idx Tff7b72= Te6edf3listTb4b4b4.Te6edf3indexOfTb4b4b4(Te6edf3flagNameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3idx Tff7b72=== Tff7b72-T79c0ff1 Tff7b72|| Te6edf3idx Tff7b72+ T79c0ff1 Tff7b72>= Te6edf3listTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3v Tff7b72= Te6edf3listTb4b4b4[Te6edf3idx Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3v Tff7b72|| Te6edf3vTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"--"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3vTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3resolveDirForPrefixCheckTb4b4b4(Te6edf3dirPathTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3fsTb4b4b4.Te6edf3realpathSyncTb4b4b4.Tff7b72native Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3fsTb4b4b4.Te6edf3realpathSyncTb4b4b4.Tff7b72nativeTb4b4b4(Te6edf3dirPathTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3fsTb4b4b4.Te6edf3realpathSyncTb4b4b4(Te6edf3dirPathTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3dirPathTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3isResolvedPathUnderRootTb4b4b4(Te6edf3resolvedCandidateTb4b4b4, Te6edf3rootPathTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3root Tff7b72= Te6edf3resolveDirForPrefixCheckTb4b4b4(Te6edf3rootPathTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3file Tff7b72= Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3resolvedCandidateTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rel Tff7b72= Te6edf3pathTb4b4b4.Te6edf3relativeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3rel Tff7b72=== Ta5d6ff"" Tff7b72|| Tb4b4b4(Tff7b72!Te6edf3relTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff`Ta5d6ff..Tffd700${Te6edf3pathTb4b4b4.Te6edf3sepTffd700}Ta5d6ff`Tb4b4b4) Tff7b72&& Te6edf3rel Tff7b72!== Ta5d6ff".."Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3pairedLegacyStorageDirTb4b4b4(Te6edf3defaultStorageDirTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3base Tff7b72= Te6edf3pathTb4b4b4.Te6edf3basenameTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3defaultStorageDirTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3base Tff7b72!== Ta5d6ff".reticulum-meshchatx"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3dirnameTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3defaultStorageDirTb4b4b4)Tb4b4b4)Tb4b4b4, Ta5d6ff".reticulum-meshchat"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} targetPath
* @param {object} ctx
* @param {import("electron").App} ctx.app
* @param {() => string} ctx.getDefaultStorageDir
* @param {() => string} ctx.getDefaultReticulumConfigDir
* @param {(argv: string[]) => string[]} ctx.getUserProvidedArguments
* @returns {boolean}
*/
Tff7b72function Te6edf3isAllowedShellPathTb4b4b4(Te6edf3targetPathTb4b4b4, Te6edf3ctxTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3targetPath Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3targetPathTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3targetPathTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"\0"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3resolved Tff7b72= Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3targetPathTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3roots Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3add Tff7b72= Tb4b4b4(Te6edf3pTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pTb4b4b4) Tb4b4b4{
Te6edf3rootsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3pTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3getDefaultStorageDirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3pairedLegacyStorageDirTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3getDefaultStorageDirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3getDefaultReticulumConfigDirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3appTb4b4b4.Te6edf3getPathTb4b4b4(Ta5d6ff"userData"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3appTb4b4b4.Te6edf3getPathTb4b4b4(Ta5d6ff"temp"Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e// Prefer app-owned exchange folders. Keep parent Downloads/Documents so
T8b949e// reveal-in-folder still works for browser saves that landed outside them.
Tff7b72const Te6edf3downloads Tff7b72= Te6edf3ctxTb4b4b4.Te6edf3appTb4b4b4.Te6edf3getPathTb4b4b4(Ta5d6ff"downloads"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3documents Tff7b72= Te6edf3ctxTb4b4b4.Te6edf3appTb4b4b4.Te6edf3getPathTb4b4b4(Ta5d6ff"documents"Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3downloadsTb4b4b4, Ta5d6ff"MeshChatX"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3documentsTb4b4b4, Ta5d6ff"MeshChatX"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3addTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3ctxTb4b4b4.Te6edf3appTb4b4b4.Te6edf3getPathTb4b4b4(Ta5d6ff"pictures"Tb4b4b4)Tb4b4b4, Ta5d6ff"MeshChatX"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// pictures may be unavailable in some Electron test fakes
Tb4b4b4}
Te6edf3addTb4b4b4(Te6edf3downloadsTb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3documentsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3portable Tff7b72= Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3PORTABLE_EXECUTABLE_DIRTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3portableTb4b4b4) Tb4b4b4{
Te6edf3addTb4b4b4(Te6edf3portableTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3userArgv Tff7b72= Te6edf3ctxTb4b4b4.Te6edf3getUserProvidedArgumentsTb4b4b4(Te6edf3processTb4b4b4.Te6edf3argvTb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Te6edf3userArgvTb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3addTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Te6edf3userArgvTb4b4b4, Ta5d6ff"--reticulum-config-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3root Tff7b72of Te6edf3rootsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3root Tff7b72&& Te6edf3isResolvedPathUnderRootTb4b4b4(Te6edf3resolvedTb4b4b4, Te6edf3rootTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Te6edf3moduleTb4b4b4.Te6edf3exports Tff7b72= Tb4b4b4{
Te6edf3isAllowedShellPathTb4b4b4,
Tb4b4b4}Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────